import vnode from './vnode.js'
// 低配版h函数：
// 必须3个函数，第一个函数必须是sel，第二个参数必须是data
// 第3个参数分为3种情况
export default function h (sel, data, c) {
    // c可能是文字，也可能是h()本身，也可能是[]
    // 1. h('div', {}, '文字')
    // 2. h('div', {}, h(sel, data, c))
    // 3. h('div', {}, [])

    // 检查参数c的类型
    if (typeof c == 'string' || typeof c == 'number') {
        return vnode(sel, data, undefined, c, undefined)
    } else if (Array.isArray(c)) {
        let children = []
        for (let i = 0; i < c.length; i++) {
            const element = c[i];
            if (!(typeof element == 'object' && element.hasOwnProperty('sel'))) {
                console.log(c)
                console.log(element)
                throw new Error('参数数组内的元素不是h函数')
            }
            children.push(element)
        }
        return vnode(sel, data, children, undefined, undefined)
    } else if (typeof c == 'object' && c.hasOwnProperty('sel')) {
        return vnode(sel, data, [c], undefined, undefined)
    } else {
        throw new Error('参数参入类型错误')
    }
}